pub fn dp_rec_mc(amount: u32) -> u32 {
    // 完全背包问题，使用动态规划方法
    let coins = [1, 2, 5, 10, 20, 30, 50, 100];
    let mut dp = vec![u32::MAX; (amount+1) as usize];
    // dp[i][j] 表示使用序号在[0, i]范围内的硬币，可以凑成 j 的最佳方案
    dp[0] = 0;
    for coin in coins.iter() {  
        for j in *coin as usize..=amount as usize {
            dp[j] = std::cmp::min(dp[j], dp[j - coin] + 1);
        }
    }
    dp[amount as usize]
}
